﻿using System;

namespace Lesson3_封装_成员方法
{
    #region 成员方法申明
    //成员方法(函数) 用来表现对象行为 
    // 1.申明在类语句块中
    // 2.用来描述对象的行为
    // 3.可被访问修饰符修饰
    // 4.返回值 参数不受限制
    // 5.方法数量不做限制
    // 6.成员方法可以重载

    //注意:
    // 1.成员方法不加static关键字
    // 2.成员方法 需要先实例化对象 再通过对象调用 相当于某个具体的对象执行了某个行为

    class Person
    {
        public string name;
        public int age;
        public Person[] friends;

        //利用封装特性便捷的进行friends数组的扩容
        /// <summary>
        /// 添加新朋友方法
        /// </summary>
        /// <param name="p">需要添加的新朋友</param>
        public void AddFriend(Person p)
        {
            //判断数组是否为null
            if (friends == null)
            {
                friends = new Person[] { p };
                return;
            }
            //申明一个容量+1的新数组
            Person[] newFriends = new Person[friends.Length + 1];
            //将原数组赋值给新数组 新数组最后一位为空
            for(int i = 0; i < friends.Length; i++)
            {
                newFriends[i] = friends[i];
            }
            //将需要添加的新元素放入新数组的最后一位
            newFriends[friends.Length] = p;
            //将新数组赋值给原数组
            friends = newFriends;
        }
        public void Speak(string str)
        {
            Console.WriteLine("{0}说:{1}", name, str);
        }
        public bool isAdult()
        {
            return age >= 18 ? true : false;
        }
    }
    #endregion
    class Program
    {
        static void Main(string[] args)
        {
            //实例化一个Person对象 并使用默认的构造函数赋值(默认值) （必须要赋值，否则无法使用）
            Person person = new Person();
            person.name = "LiberTy";
            person.age = 18;
            person.friends = null;
            //调用Speak方法
            person.Speak("Hello World!");
            //调用IsAdult方法
            Console.WriteLine("{0}", person.isAdult() ? "成年" : "未成年");

            //再实例化一个新Person对象
            Person p1 = new Person();
            p1.name = "旺财";
            p1.age = 17;
            Console.WriteLine("{0}", p1.isAdult() ? "成年" : "未成年");
            //将p1添加为person的新朋友
            person.AddFriend(p1);
            //将person添加为p1的新朋友
            p1.AddFriend(person);

            //查看person的所有朋友
            for(int i = 0;i < person.friends.Length ; i++)
            {
                Console.WriteLine(person.friends[i].name);
            }
            //查看p1的所有朋友
            for(int i = 0; i < p1.friends.Length ; i++)
            {
                Console.WriteLine(p1.friends[i].name);
            }
        }
    }
}